package saa.model.periodo.aluno;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

import saa.Configuracao;
import saa.model.disciplina.Disciplina;
import saa.model.periodo.OfertaDisciplina;
import saa.model.periodo.UnidadeDisciplina;
import saa.model.usuario.Aluno;

@Entity
public class OfertaDisciplinaAluno implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;

	private int objetivoNota;
	private int nota;
	private int faltas;

	@ManyToOne
	private OfertaDisciplina ofertaDisciplina;
	@ManyToOne
	private Aluno aluno;

	@OneToMany
	private List<UnidadeDisciplina> bimestres;

	public OfertaDisciplinaAluno() {
		super();
	}

	public OfertaDisciplinaAluno(Disciplina ementa, int objetivoNota,
			int objetivoFalta, boolean anual) {
		this.objetivoNota = objetivoNota;

		if (anual) {
			bimestres = new ArrayList<UnidadeDisciplina>(4);
		} else {
			bimestres = new ArrayList<UnidadeDisciplina>(4);
		}
	}

	public OfertaDisciplinaAluno(Disciplina ementa, int objetivoNota,
			int objetivoPorcentagemPresenca) {
		this(ementa, objetivoNota, objetivoPorcentagemPresenca, true);
	}

	public OfertaDisciplinaAluno(Disciplina ementa, int objetivoNota) {
		this(ementa, objetivoNota, Configuracao.porcentagemMinimaDePresenca);
	}

	public OfertaDisciplinaAluno(Disciplina ementa) {
		this(ementa, Configuracao.notaMinimaParaPassar,
				Configuracao.porcentagemMinimaDePresenca);
	}

	public int getObjetivoNota() {
		return objetivoNota;
	}

	public void setObjetivoNota(int objetivoNota) {
		this.objetivoNota = objetivoNota;
	}

	public List<UnidadeDisciplina> getBimestres() {
		return bimestres;
	}

	public void setBimestres(List<UnidadeDisciplina> bimestres) {
		this.bimestres = bimestres;
	}

	public void adicionarBimestre(UnidadeDisciplina bimestre) {
		this.bimestres.add(bimestre);
	}

	public int[] getNotasNecessariasBimestres() {
		return null;
	}
}